"""
PDEs module for PDEJulia.jl

Provides comprehensive PDE definitions and evolution equations including
advanced PDEs for pattern formation, phase separation, interface dynamics,
and stochastic processes.
"""
module PDEs

using LinearAlgebra
using Random
using ..Grids
using ..Fields

# Include all PDE implementations
include("base.jl")
include("diffusion.jl")
include("wave.jl")
include("allen_cahn.jl")
include("cahn_hilliard.jl")
include("kpz_interface.jl")
include("kuramoto_sivashinsky.jl")
include("swift_hohenberg.jl")
include("multifield_pde.jl")
include("stochastic_pde.jl")

# Export base types and functions
export AbstractPDE
export evolution_rate, solve_steady_state
export solve_laplace_equation, solve_poisson_equation

# Export core PDE types
export PDE, DiffusionPDE, WavePDE

# Export advanced single-field PDEs
export AllenCahnPDE, CahnHilliardPDE, KPZInterfacePDE
export KuramotoSivashinskyPDE, SwiftHohenbergPDE

# Export multi-field PDE systems
export MultiFieldPDE, ReactionDiffusionPDE, CoupledOscillatorPDE
export FitzHughNagumoReaction, SchnakenbergReaction, GrayScottReaction, BrusselatorReaction

# Export stochastic PDE support
export NoiseProcess, WhiteNoise, ColoredNoise, MultiplicativeNoise
export StochasticPDE, generate_noise
export StochasticAllenCahnPDE, StochasticKPZPDE, StochasticCahnHilliardPDE

# Export analysis functions
export free_energy, wave_energy, get_interface_width, get_critical_wavelength
export get_roughness, get_interface_velocity, get_energy, get_dissipation_rate
export get_total_concentration, get_field_energies, get_interaction_energy
export has_noise, is_nonlinear, is_chaotic, is_pattern_forming, is_energy_decreasing
export compute_noise_statistics, ensemble_average, get_noise_strength

# Export utility functions
export expression, characteristic_speed, cfl_condition
export is_hyperbolic, requires_cfl_stability, is_stiff, requires_high_accuracy
export get_time_scale, get_lyapunov_exponent_estimate

end # module PDEs